package com.atguigu.vod.controller;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.vod.model.v20170321.DeleteVideoRequest;
import com.aliyuncs.vod.model.v20170321.GetVideoPlayAuthRequest;
import com.aliyuncs.vod.model.v20170321.GetVideoPlayAuthResponse;
import com.atguigu.commonutils.R;
import com.atguigu.servicebase.exceptionhandler.GuliException;
import com.atguigu.vod.service.VodService;
import com.atguigu.vod.utils.ConstantVodUtils;
import com.atguigu.vod.utils.InitVodClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

@RestController
@RequestMapping("/eduvod/video")
@CrossOrigin
public class VodController {
        @Autowired
        private VodService vodService;

        //上传视频到阿里云得方法
        @PostMapping("uploadAlyVideo")
        public R uploadAlyVideo(MultipartFile file){
            String videoId = vodService.uploadVideoAly(file);
            return R.ok().data("videoId",videoId);
        }

        //删除视频
        @DeleteMapping("removeAlyVideo/{id}")
        public R removeAlyVideo(@PathVariable String id){
            try{
                //初始化对象
                DefaultAcsClient client = InitVodClient.initVodClient(ConstantVodUtils.ACCESS_KEY_ID, ConstantVodUtils.ACCESS_KEY_SECRET);
                //创建删除视频的对象
                DeleteVideoRequest request = new DeleteVideoRequest();
                //设置视频id进行删除
                request.setVideoIds(id);
                //调用初始化对象的方法实现删除
                client.getAcsResponse(request);
                return R.ok();

            }catch (Exception e){
                e.printStackTrace();
                throw new GuliException(20001,"删除视频失败");
                //删除失败抛异常
            }
            //删除阿里云视频接口
        }
        //删除多个视频id的方法
        //传递多个视频id,换地多个id
        @DeleteMapping("deletebatch")
        public R deleteBatch(@RequestParam("videoIdList") List<String>videoIdList){
            vodService.removeMoreAlyVideo(videoIdList);
            return R.ok();

        }
        //根据视频id获取视频凭证
    @GetMapping("getPlayAuth/{id}")
    public R getPlayAuth(@PathVariable String id){
         try{

             //创建初始化
             DefaultAcsClient client =
                     InitVodClient.initVodClient(ConstantVodUtils.ACCESS_KEY_ID, ConstantVodUtils.ACCESS_KEY_SECRET);
                //创建获取凭证的request和response
             GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest();

             //向request设置视频id
             request.setVideoId(id);
             //调用方法得到凭证
             GetVideoPlayAuthResponse response = client.getAcsResponse(request);
             String playAuth = response.getPlayAuth();
            return  R.ok().data("playAuth",playAuth);

         }   catch (Exception e){
             throw  new GuliException(20001,"获取凭证失败");
         }

    }



}

